package br.com.danieljr.crowdmap.fabricas;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationManager;
import br.com.danieljr.crowdmap.basededados.BaseDadosArquivo;
import br.com.danieljr.crowdmap.basededados.Dados;
import br.com.danieljr.crowdmap.basededados.IControladorBaseDados;

import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;

public class FabricaPontos {

	private static List<Dados> lista;
	private static IControladorBaseDados bd;

	public static List<CircleOptions> retornaPontos(Context cont) {
		List<CircleOptions> resp = new ArrayList<CircleOptions>();
		bd = new BaseDadosArquivo("dados.txt");
		bd.abrir();
		lista = bd.listarDados();
		while (!lista.isEmpty()) {
			resp.add(circulos(cont));
		}
		return resp;
	}

	private static CircleOptions circulos(Context c) {
		int qualidade = 0, qtd = 1;
		Iterator<Dados> iterator = lista.iterator();
		Dados d2, d1 = iterator.next();
		iterator.remove();
		qualidade += d1.getSinal();
		Location l2, l1 = retornar(d1);
		while (iterator.hasNext()) {
			d2 = iterator.next();
			l2 = retornar(d2);
			if (l1.distanceTo(l2) <= 200) {
				qualidade += d2.getSinal();
				qtd++;
				iterator.remove();
			}
		}
		qualidade = (int) qualidade / qtd;
		int cor = FabricaCor.retornaCor(qualidade);
		CircleOptions circulo = new CircleOptions();
		circulo.center(new LatLng(d1.getLatitude(), d1.getLongitude()));
		SharedPreferences pref = c.getSharedPreferences("coleta", Context.MODE_PRIVATE);
		int raio = pref.getInt("raio", 200);
		circulo.radius(raio);
		circulo.fillColor(cor);
		circulo.strokeColor(Color.BLACK);
		circulo.strokeWidth(1);
		return circulo;
	}

	private static Location retornar(Dados d) {
		Location resp = new Location(LocationManager.GPS_PROVIDER);
		resp.setLatitude(d.getLatitude());
		resp.setLongitude(d.getLongitude());
		return resp;
	}
}
